
#include <iostream>
#include <assert.h>

using namespace std;

// 内联函数:
// 使用inline声明和定义不能分离
// 在类中定义成员函数，该函数会默认当作内联函数
// 内联函数如果代码很长，编译器会聪明的不把他当作内敛看
//
// auto
// 自动推到类型
//
// nullptr
// NULL 为 0
// nullptr 补之前的缺陷 为 ((void*) 0 )
//
// 类和对象1


// 用宏写一个相加的功能，正确的写法为：
// #define Add(x, y) ((x) + (y))   // 注意没有分号


// 内敛函数
inline int add(int a, int b)
{
    return a + b;
}

// struct xxxxx 被升级成了类，但是 struct 不给限定符，默认全部都是公有
// class xxxxx 默认是私有
struct A
{
    int _a;
    int _b;
    int _all;

    // 还可以定义成员函数
    // ......
};

class stack
{
public:
    // 构造函数
    stack(int capacity = 4)
    {
        _a = (int*)malloc(sizeof(int) * capacity);
        assert(_a);
        _top = 0;
        _capacity = capacity;
    }
    // .......
    //
    
    void push(int x)
    {
        _a[_top ++ ] = x;
    }

private:    
    int* _a;
    int _top;
    int _capacity;
};

int main()
{
    A a;
    stack s;

    return 0;
}
